When designing products with microcontroller systems it may be desirable to program code into secure memory so that a customer can execute the code but not copy or modify the code. Additionally, it may be desirable to partition an application into secure and non-secure domains, where the secure domain allows critical information (e.g., cryptographic keys) to be processed by code stored in secure memory with full system access, while the non-secure domain does not have access to the secure memory. This split domain architecture improves security robustness by preventing software errors from accidentally leaking information from the secure domain into the non-secure domain. Microcontroller systems with split domain architectures are designed with a single central processing unit (CPU) that is designed to operate in secure and non-secure modes to ensure a safe transition between secure and non-secure operations.